/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package newpackage;

/**
 *
 * @author leonardo
 */
public class Arvores1 {

    private static No inserir_vetor(int[] vetor) {
      Arvores1 a = new Arvores1();
      No n = new No(vetor[0]);
      for(int i = 1; i<vetor.length;i++){   
      a.inserir(n,vetor[i]); }
      return n;
    }

    
    
public void inserir(No node, int valor) { 

        if (valor < node.valor) {
            if (node.esquerda != null) {
                inserir(node.esquerda, valor);
            } else {
                System.out.println("  Inserindo " + valor + " a esquerda de " + node.valor);
                node.esquerda = new No(valor);
            }
        } else if (valor > node.valor) {
            if (node.direita != null) {
                inserir(node.direita, valor);
            } else {
                System.out.println("  Inserindo " + valor + " a direita de " + node.valor);
                node.direita = new No(valor);
            }
        }
    }

    public No removeValorMinimoDaArvore(No node) {
        if (node == null) {
            System.out.println("  ERRO ");
        } else if (node.esquerda != null) {
            node.esquerda = removeValorMinimoDaArvore(node.esquerda);
            return node;
        } else {
        	//Se não tiver elemento esquerdo só nós resta o da direita
            return node.direita;
        }
        return null;
    }

    public void prefixado(No no) {
        if(no != null){
            System.out.print(no.valor + " ");
            prefixado(no.esquerda);
            prefixado(no.direita);
        }
    }

    public void posfixado(No no) {
        if(no != null){
        	posfixado(no.esquerda);
        	posfixado(no.direita);
            System.out.print(no.valor + " ");
        }
    }


    public void emordem(No no) {
        if(no != null){
        	emordem(no.esquerda);
		System.out.print(no.valor + " ");
        	emordem(no.direita);
        }
    }



public static void main(String[] args) {
      Arvores1 a = new Arvores1();
      int vetor[] = {2,6,5,4,8,2,4,5};
            
      No n = inserir_vetor(vetor);
      
      System.out.println("Em ordem:");
      a.emordem(n);
      
      System.out.println("\nposfixado:");
      a.posfixado(n);
      
      System.out.println("\nPrefixado:");
      a.prefixado(n);
    }
    
}
